﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using TcomInvoice;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace TestProject3
{
    /// <summary>
    /// Summary description for UnitTest1
    /// </summary>
    [TestClass]
    public class UnitTest1
    {
        public UnitTest1()
        {
            //
            // TODO: Add constructor logic here
            //
        }

        private TestContext testContextInstance;

        /// <summary>
        ///Gets or sets the test context which provides
        ///information about and functionality for the current test run.
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region Additional test attributes
        //
        // You can use the following additional attributes as you write your tests:
        //
        // Use ClassInitialize to run code before running the first test in the class
        // [ClassInitialize()]
        // public static void MyClassInitialize(TestContext testContext) { }
        //
        // Use ClassCleanup to run code after all tests in a class have run
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        //
        // Use TestInitialize to run code before running each test 
        // [TestInitialize()]
        // public void MyTestInitialize() { }
        //
        // Use TestCleanup to run code after each test has run
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        //
        #endregion

        [TestMethod]
        public void TestMethod1()
        {
            Assert.AreEqual(Utility.NumberInWord(0), "");

            Assert.AreEqual(Utility.NumberInWord(1), "một ");
            Assert.AreEqual(Utility.NumberInWord(10), "mười ");
            Assert.AreEqual(Utility.NumberInWord(100), "một trăm ");
            Assert.AreEqual(Utility.NumberInWord(1000), "một nghìn ");
            Assert.AreEqual(Utility.NumberInWord(10000), "mười nghìn ");
            Assert.AreEqual(Utility.NumberInWord(100000), "một trăm nghìn ");
            Assert.AreEqual(Utility.NumberInWord(1000000), "một triệu ");
            Assert.AreEqual(Utility.NumberInWord(10000000), "mười triệu ");
            Assert.AreEqual(Utility.NumberInWord(100000000), "một trăm triệu ");
            Assert.AreEqual(Utility.NumberInWord(1000000000), "một tỷ ");
            Assert.AreEqual(Utility.NumberInWord(10000000000), "mười tỷ ");
            Assert.AreEqual(Utility.NumberInWord(100000000000), "một trăm tỷ ");
            Assert.AreEqual(Utility.NumberInWord(11), "mười một ");
            Assert.AreEqual(Utility.NumberInWord(15), "mười lăm ");
            Assert.AreEqual(Utility.NumberInWord(20), "hai mươi ");
            Assert.AreEqual(Utility.NumberInWord(21), "hai mươi mốt ");
            Assert.AreEqual(Utility.NumberInWord(25), "hai mươi lăm ");
            Assert.AreEqual(Utility.NumberInWord(29), "hai mươi chín ");
            Assert.AreEqual(Utility.NumberInWord(101), "một trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(105), "một trăm lẻ năm ");
            Assert.AreEqual(Utility.NumberInWord(111), "một trăm mười một ");
            Assert.AreEqual(Utility.NumberInWord(110), "một trăm mười ");
            Assert.AreEqual(Utility.NumberInWord(120), "một trăm hai mươi ");
            Assert.AreEqual(Utility.NumberInWord(121), "một trăm hai mươi mốt ");
            Assert.AreEqual(Utility.NumberInWord(125), "một trăm hai mươi lăm ");
            Assert.AreEqual(Utility.NumberInWord(205), "hai trăm lẻ năm ");
            Assert.AreEqual(Utility.NumberInWord(265), "hai trăm sáu mươi lăm ");

            Assert.AreEqual(Utility.NumberInWord(1001), "một nghìn không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(1008), "một nghìn không trăm lẻ tám ");
            Assert.AreEqual(Utility.NumberInWord(1010), "một nghìn không trăm mười ");
            Assert.AreEqual(Utility.NumberInWord(1011), "một nghìn không trăm mười một ");
            Assert.AreEqual(Utility.NumberInWord(1015), "một nghìn không trăm mười lăm ");
            Assert.AreEqual(Utility.NumberInWord(1041), "một nghìn không trăm bốn mươi mốt ");
            Assert.AreEqual(Utility.NumberInWord(1101), "một nghìn một trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(1110), "một nghìn một trăm mười ");
            Assert.AreEqual(Utility.NumberInWord(1111), "một nghìn một trăm mười một ");
            Assert.AreEqual(Utility.NumberInWord(1150), "một nghìn một trăm năm mươi ");
            Assert.AreEqual(Utility.NumberInWord(1151), "một nghìn một trăm năm mươi mốt ");
            Assert.AreEqual(Utility.NumberInWord(1145), "một nghìn một trăm bốn mươi lăm ");
            Assert.AreEqual(Utility.NumberInWord(1500), "một nghìn năm trăm ");
            Assert.AreEqual(Utility.NumberInWord(1501), "một nghìn năm trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(1510), "một nghìn năm trăm mười ");
            Assert.AreEqual(Utility.NumberInWord(1511), "một nghìn năm trăm mười một ");
            Assert.AreEqual(Utility.NumberInWord(1551), "một nghìn năm trăm năm mươi mốt ");
            Assert.AreEqual(Utility.NumberInWord(1555), "một nghìn năm trăm năm mươi lăm ");
            Assert.AreEqual(Utility.NumberInWord(5555), "năm nghìn năm trăm năm mươi lăm ");

            Assert.AreEqual(Utility.NumberInWord(10001), "mười nghìn không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(10005), "mười nghìn không trăm lẻ năm ");
            Assert.AreEqual(Utility.NumberInWord(10010), "mười nghìn không trăm mười ");
            Assert.AreEqual(Utility.NumberInWord(10011), "mười nghìn không trăm mười một ");
            Assert.AreEqual(Utility.NumberInWord(10015), "mười nghìn không trăm mười lăm ");
            Assert.AreEqual(Utility.NumberInWord(10016), "mười nghìn không trăm mười sáu ");
            Assert.AreEqual(Utility.NumberInWord(10030), "mười nghìn không trăm ba mươi ");
            Assert.AreEqual(Utility.NumberInWord(10031), "mười nghìn không trăm ba mươi mốt ");
            Assert.AreEqual(Utility.NumberInWord(10100), "mười nghìn một trăm ");
            Assert.AreEqual(Utility.NumberInWord(10101), "mười nghìn một trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(10201), "mười nghìn hai trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(10205), "mười nghìn hai trăm lẻ năm ");
            Assert.AreEqual(Utility.NumberInWord(10210), "mười nghìn hai trăm mười ");
            Assert.AreEqual(Utility.NumberInWord(10215), "mười nghìn hai trăm mười lăm ");
            Assert.AreEqual(Utility.NumberInWord(10217), "mười nghìn hai trăm mười bảy ");
            Assert.AreEqual(Utility.NumberInWord(11000), "mười một nghìn ");
            Assert.AreEqual(Utility.NumberInWord(15000), "mười lăm nghìn ");
            Assert.AreEqual(Utility.NumberInWord(17000), "mười bảy nghìn ");
            Assert.AreEqual(Utility.NumberInWord(50000), "năm mươi nghìn ");
            Assert.AreEqual(Utility.NumberInWord(50001), "năm mươi nghìn không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(51001), "năm mươi mốt nghìn không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(54001), "năm mươi bốn nghìn không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(55001), "năm mươi lăm nghìn không trăm lẻ một ");

            Assert.AreEqual(Utility.NumberInWord(100001), "một trăm nghìn không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(101001), "một trăm lẻ một nghìn không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(101010), "một trăm lẻ một nghìn không trăm mười ");
            Assert.AreEqual(Utility.NumberInWord(101011), "một trăm lẻ một nghìn không trăm mười một ");
            Assert.AreEqual(Utility.NumberInWord(101041), "một trăm lẻ một nghìn không trăm bốn mươi mốt ");
            Assert.AreEqual(Utility.NumberInWord(111001), "một trăm mười một nghìn không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(150001), "một trăm năm mươi nghìn không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(155555), "một trăm năm mươi lăm nghìn năm trăm năm mươi lăm ");
            Assert.AreEqual(Utility.NumberInWord(757551), "bảy trăm năm mươi bảy nghìn năm trăm năm mươi mốt ");

            Assert.AreEqual(Utility.NumberInWord(1000001), "một triệu không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(1000011), "một triệu không trăm mười một ");
            Assert.AreEqual(Utility.NumberInWord(1000015), "một triệu không trăm mười lăm ");
            Assert.AreEqual(Utility.NumberInWord(1000050), "một triệu không trăm năm mươi ");
            Assert.AreEqual(Utility.NumberInWord(1100024), "một triệu một trăm nghìn không trăm hai mươi bốn ");
            Assert.AreEqual(Utility.NumberInWord(1100050), "một triệu một trăm nghìn không trăm năm mươi ");
            Assert.AreEqual(Utility.NumberInWord(1351024), "một triệu ba trăm năm mươi mốt nghìn không trăm hai mươi bốn ");

            Assert.AreEqual(Utility.NumberInWord(10000001), "mười triệu không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(11000001), "mười một triệu không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(25000000), "hai mươi lăm triệu ");
            Assert.AreEqual(Utility.NumberInWord(25007000), "hai mươi lăm triệu không trăm lẻ bảy nghìn ");
            Assert.AreEqual(Utility.NumberInWord(25035000), "hai mươi lăm triệu không trăm ba mươi lăm nghìn ");
            Assert.AreEqual(Utility.NumberInWord(25035010), "hai mươi lăm triệu không trăm ba mươi lăm nghìn không trăm mười ");
            Assert.AreEqual(Utility.NumberInWord(25035091), "hai mươi lăm triệu không trăm ba mươi lăm nghìn không trăm chín mươi mốt ");
            Assert.AreEqual(Utility.NumberInWord(50000001), "năm mươi triệu không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(50000051), "năm mươi triệu không trăm năm mươi mốt ");

            Assert.AreEqual(Utility.NumberInWord(100000001), "một trăm triệu không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(101000001), "một trăm lẻ một triệu không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(101100001), "một trăm lẻ một triệu một trăm nghìn không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(101101001), "một trăm lẻ một triệu một trăm lẻ một nghìn không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(121651009), "một trăm hai mươi mốt triệu sáu trăm năm mươi mốt nghìn không trăm lẻ chín ");
            Assert.AreEqual(Utility.NumberInWord(321685209), "ba trăm hai mươi mốt triệu sáu trăm tám mươi lăm nghìn hai trăm lẻ chín ");

            Assert.AreEqual(Utility.NumberInWord(1000000001), "một tỷ không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(1700000000), "một tỷ bảy trăm triệu ");
            Assert.AreEqual(Utility.NumberInWord(1700000001), "một tỷ bảy trăm triệu không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(1745000001), "một tỷ bảy trăm bốn mươi lăm triệu không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(1745004001), "một tỷ bảy trăm bốn mươi lăm triệu không trăm lẻ bốn nghìn không trăm lẻ một ");
            Assert.AreEqual(Utility.NumberInWord(9745004001), "chín tỷ bảy trăm bốn mươi lăm triệu không trăm lẻ bốn nghìn không trăm lẻ một ");
        }

        [TestMethod]
        public void TestMethod2()
        {
            //Assert.AreEqual(Utility.NumberInWord(1000000000000), "một nghìn tỷ ");
        }
    }
}
